function [model, constraint] = acados_ris_model()
% 2024/03/25
% Author: LHP
% Description: robust invariant set optimization problem model defined by CasADi。acados无法求解半定规划，故代码已被废弃

    import casadi.*
    model = struct();
    constraint = struct();

    model_name = 'ris_model';

%% CasADi Model
    nx = 3;
    nu = 2;
    Bw = [1,0,0;0,1,0;0,0,3]; % 扰动输入矩阵
    I = eye(3);
    lambda0 = 0.3; % 给定的常数:越大，变化越小

    % 定义优化变量
    X = SX.sym('X',nx+1,nx+1); % X=[X,0;0;mu]
    Y = SX.sym('Y',nu,nx);
    %mu = SX.sym('mu',1,1);

    % 创建状态变量的导数
    Xdot = SX.sym('Xdot', nx+1,nx+1); 
    z = SX.sym('z', nx+1,nx+1);

    % A和B是线性化后的系统矩阵，每次会变
    Xr = SX.sym('Xr', nx, nx+nu); % 参考状态:Xr=[A;B]=[Xr(:,1:3);Xr(:,4:5)]

    % 定义系统模型(必须项)
    % 隐式动态方程f_impl
    f_impl = 0; 

    % 定义通用代价函数
    cost_expr_ext_cost = -log(det(X));
    cost_expr_ext_cost_e = cost_expr_ext_cost;

    % 定义LMI约束   
    % 约束条件"A >= 0"表示矩阵 A 是半正定的（Positive Semi-Definite），即所有特征值（eigenvalues）均大于等于零。
    % 这种约束条件通常出现在优化问题中的线性矩阵不等式（LMI）中，用于约束某些变量的组合形成的矩阵必须是半正定的
    LMI = [(Xr(:,1:3) * X(1:3,1:3) + Xr(:,4:5) * Y)' + Xr(:,1:3) * X(1:3,1:3) + Xr(:,4:5) * Y + (-lambda0) * X(1:3,1:3), Bw; Bw', X(4,4)*I]; % LMI约束
    constraint.LMI = Function('LMI', {X, Y}, {LMI}); 

    % 设置约束表达式：用于描述优化问题中的约束条件，具体的约束表达式在后续的代码中会赋值
    constraint.expr = vertcat(LMI, [X(1:3,1:3),zeros(3,3);zeros(3,3),eye(3)], [X(4,4),zeros(1,5);zeros(5,1),eye(5)]); 

    constraint.LMI_min = 0;
    constraint.X_min = 0;
    constraint.mu_min = 0;
    constraint.LMI_max = 1e6;
    constraint.X_max = 1e6;
    constraint.mu_max = 1e6;

    % bounds
    model.X_min = 0.0;
    model.mu_min = 0.0;

    % Define model struct
    model.f_impl_expr = f_impl;                            % 设置隐式动态方程
    model.x           = X;                                 % 设置状态变量
    model.xdot        = Xdot;                              % 设置状态变量的导数
    model.z           = z;
    model.u           = Y;                                 % 设置控制变量
    model.p           = Xr;                                % 设置参考状态变量
    model.name        = model_name;                        % 设置模型名称

    model.cost_expr_ext_cost = cost_expr_ext_cost;
    model.cost_expr_ext_cost_e = cost_expr_ext_cost_e;
end